home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / python2.4 / idlelib / PathBrowser.py < prev    next >
Text File  |  2005-10-18  |  3KB  |  96 lines

  1. import os
  2. import sys
  3. import imp
  4.  
  5. from TreeWidget import TreeItem
  6. from ClassBrowser import ClassBrowser, ModuleBrowserTreeItem
  7.  
  8. class PathBrowser(ClassBrowser):
  9.  
  10.     def __init__(self, flist):
  11.         self.init(flist)
  12.  
  13.     def settitle(self):
  14.         self.top.wm_title("Path Browser")
  15.         self.top.wm_iconname("Path Browser")
  16.  
  17.     def rootnode(self):
  18.         return PathBrowserTreeItem()
  19.  
  20. class PathBrowserTreeItem(TreeItem):
  21.  
  22.     def GetText(self):
  23.         return "sys.path"
  24.  
  25.     def GetSubList(self):
  26.         sublist = []
  27.         for dir in sys.path:
  28.             item = DirBrowserTreeItem(dir)
  29.             sublist.append(item)
  30.         return sublist
  31.  
  32. class DirBrowserTreeItem(TreeItem):
  33.  
  34.     def __init__(self, dir, packages=[]):
  35.         self.dir = dir
  36.         self.packages = packages
  37.  
  38.     def GetText(self):
  39.         if not self.packages:
  40.             return self.dir
  41.         else:
  42.             return self.packages[-1] + ": package"
  43.  
  44.     def GetSubList(self):
  45.         try:
  46.             names = os.listdir(self.dir or os.curdir)
  47.         except os.error:
  48.             return []
  49.         packages = []
  50.         for name in names:
  51.             file = os.path.join(self.dir, name)
  52.             if self.ispackagedir(file):
  53.                 nn = os.path.normcase(name)
  54.                 packages.append((nn, name, file))
  55.         packages.sort()
  56.         sublist = []
  57.         for nn, name, file in packages:
  58.             item = DirBrowserTreeItem(file, self.packages + [name])
  59.             sublist.append(item)
  60.         for nn, name in self.listmodules(names):
  61.             item = ModuleBrowserTreeItem(os.path.join(self.dir, name))
  62.             sublist.append(item)
  63.         return sublist
  64.  
  65.     def ispackagedir(self, file):
  66.         if not os.path.isdir(file):
  67.             return 0
  68.         init = os.path.join(file, "__init__.py")
  69.         return os.path.exists(init)
  70.  
  71.     def listmodules(self, allnames):
  72.         modules = {}
  73.         suffixes = imp.get_suffixes()
  74.         sorted = []
  75.         for suff, mode, flag in suffixes:
  76.             i = -len(suff)
  77.             for name in allnames[:]:
  78.                 normed_name = os.path.normcase(name)
  79.                 if normed_name[i:] == suff:
  80.                     mod_name = name[:i]
  81.                     if not modules.has_key(mod_name):
  82.                         modules[mod_name] = None
  83.                         sorted.append((normed_name, name))
  84.                         allnames.remove(name)
  85.         sorted.sort()
  86.         return sorted
  87.  
  88. def main():
  89.     import PyShell
  90.     PathBrowser(PyShell.flist)
  91.     if sys.stdin is sys.__stdin__:
  92.         mainloop()
  93.  
  94. if __name__ == "__main__":
  95.     main()
  96.